package xproto

// Access 链路注册
type Access struct {
	Tag           string `json:"-"`
	DeviceNo      string `json:"deviceNo"`   // 设备号
	DeviceTime    string `json:"deviceTime"` // 设备时间
	Online        bool   `json:"online"`
	RemoteAddress string `json:"remoteAddress"` // 设备网络地址
	Session       string `json:"session"`       // 链路会话号
	LinkType      int    `json:"linkType"`      // 链路类型
	UpTraffic     int64  `json:"upTraffic"`     // 上行流量
	DownTraffic   int64  `json:"downTraffic"`   // 下行流量
	NetType       int    `json:"netType"`       // 网络类型
	Version       string `json:"version"`       // 版本信息
	DevType       string `json:"devType"`       // 设备类型
}

// Gps 上报Location
type Location struct {
	Type       uint8   `json:"tp"` // 定位类型
	Satellites uint8   `json:"sat"`
	Speed      float32 `json:"spd"` // 速度
	Angle      float32 `json:"agl"` // 角度
	Longitude  float32 `json:"lng"` // 经度
	Latitude   float32 `json:"lat"` // 纬度
	Altitude   int     `json:"alt"` // 海拔
}

// Mileage 里程
type Mileage struct {
	Total uint32 `json:"tml"` // 总共
	Now   uint32 `json:"nml"` // 当前
}

// Module 模块状态
type Module struct {
	Dial      uint8  `json:"dial"` // 移动网络(0:数据不存在，1:数据存在)
	Gps       uint8  `json:"gps"`  // 定位模块(0:数据不存在，1:数据存在)
	Wifi      uint8  `json:"wifi"` // WIFI模块(0:数据不存在，1:数据存在)
	Gsensor   uint8  `json:"gs"`   // GSensor(0:数据不存在，1:数据存在)
	Record    uint16 `json:"rec"`  // 每一位代表一个通道
	VideoLoss uint16 `json:"vlos"`
}

// Mobile 移动网络状态
type Mobile struct {
	Signal uint8 `json:"sgl"` // 信号强度
	Type   uint8 `json:"tp"`  // 网络类型
}

// Status 状态数据
type Status struct {
	Tag      string      `json:"-"`
	DeviceNo string      `json:"deviceNo"`
	DTU      string      `json:"dtu"`     // DTU
	Flag     uint8       `json:"flag"`    // 0-实时 1-补传 2-报警开始Gps 3-报警结束Gps
	Acc      uint8       `json:"acc"`     // acc
	Location Location    `json:"loc"`     // 位置信息
	Tempers  []float32   `json:"temps"`   // 温度
	Mileage  Mileage     `json:"mile"`    // 里程
	Oils     []float32   `json:"oils"`    // 油耗
	Module   Module      `json:"mod"`     // 模块状态
	Mobile   Mobile      `json:"mobile"`  // 移动网络
	Payload  interface{} `json:"payload"` // 自定义扩展数据
}

type AlarmChl struct {
	Channel string `json:"ch"`
}

type AlarmInput struct {
	AlarmChl
	Num string `json:"num"`
}

type AlarmThreshold struct {
	Vt  string `json:"vt"`
	Tt  string `json:"tt"`
	Max string `json:"max"`
	Min string `json:"min"`
	Avg string `json:"avg"`
	Cur string `json:"cur"`
	Pre string `json:"pre"`
}

type AlarmSpd struct {
	AlarmThreshold
	Dur  string `json:"dur"`
	Spds string `json:"spds"`
}

type AlarmShake struct {
	AlarmThreshold
	Dt string `json:"dt"`
}

// 电压
type AlarmVoltage struct {
	Dt  string `json:"dt"`
	Cur string `json:"cur"`
	Vt  string `json:"vt"`
}

type AlarmPark struct {
	Vt string `json:"vt"`
	St string `json:"st"`
}

// Alarm 报警
type Alarm struct {
	Tag       string      `json:"-"`
	DeviceNo  string      `json:"deviceNo"`
	DTU       string      `json:"dtu"`
	UUID      string      `json:"uuid"`
	Type      int         `json:"type"`
	SubType   int         `json:"subType"`
	StartTime string      `json:"startTime"`
	EndTime   string      `json:"endTime"`
	Data      interface{} `json:"data"`
	Status    *Status     `json:"status"`
}

// EventFile
type EventFile struct {
	FileName string `josn:"fileName"`
	FileType int    `json:"fileType"`
}

type EventFileCapture struct {
	EventFile
	Channel   int     `json:"channel"`
	Latitude  float32 `json:"latitude"`
	Longitude float32 `json:"longitude"`
	Speed     float32 `json:"speed"`
}

type EventFileLittle struct {
	EventFile
	Channel  int `json:"channel"`
	Size     int `json:"size"`
	Duration int `json:"duration"`
}

type EventFtpTransfer struct {
	EventFile
	Ftp string `json:"ftp"`
}

// Event 事件
type Event struct {
	Tag      string      `json:"-"`
	DeviceNo string      `json:"deviceNo"`
	Session  string      `json:"session"`
	DTU      string      `json:"dtu"`
	Type     int         `json:"type"`
	Data     interface{} `json:"data"` // 负载数据
	Status   *Status     `json:"status"`
}

type Frame struct {
	DeviceNo  string
	Session   string
	Channel   uint16
	Type      uint16
	Timestamp int64
	Data      []byte
	*Status
}

type RawData struct {
	DeviceNo  string
	Session   string
	Type      uint16
	Channel   uint16 //
	Timestamp int64  // 时间戳
	Data      []byte
}
